package com.vanke.agent.common;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;

import org.apache.log4j.Logger;

import com.vanke.agent.Cfg;

public final class Util {
	private Util() {
	}

	static final DateFormat dateFormat = new SimpleDateFormat(
			"yyyy-MM-dd HH:mm:ss.S");

	public static String formatDate(Date d) {
		return d == null ? "null" : dateFormat.format(d);
	}

	/**
	 * 验证是否是邮箱
	 */
	public static boolean isEmail(String str) {
		if (str == null) {
			return false;
		}
		if (!str.matches(Cfg.get("util.pattern.email"))) {
			return false;
		}
		return true;
	}

	//	/**
	//	 * 验证是否是中国座机号
	//	 */
	//	public static boolean isTels(String str) {
	//		if (str == null) {
	//			return false;
	//		}
	//		if (!str.matches(Cfg.get("util.pattern.tel"))) {
	//			return false;
	//		}
	//		return true;
	//	}
	public static void main(String[] args) {
		Logger.getLogger(Util.class).info("Whi");
	}

	public static Date offMinute(Date d, int min) {
		if (d == null || min == 0) {
			return d;
		}
		Calendar cal = Calendar.getInstance();
		cal.setTime(d);
		cal.add(Calendar.MINUTE, min);
		return cal.getTime();
	}

	/**
	 * 验证是否是中国手机号
	 */
	public static boolean isMobile(String str) {
		if (str == null) {
			return false;
		}
		if (!str.matches("((13[0-9])|(14[0-9])|(15[0-9])|(17[0-9])|(18[0-9]))\\d{8}")) {
			return false;
		}
		return true;
	}

	/**
	 * 判断是否为有效中国人姓名
	 */
	public static boolean isCallName(String str) {
		if (str == null || str.length() < 2) {
			return false;
		}
		str = str.substring(1);
		// 先生、女士、小姐、哥、姐、某、总
		return str.contains("先生") || str.contains("女士") || str.contains("小姐")
				|| str.contains("某") || str.contains("总") || str.equals("哥")
				|| str.contains("姐");
	} //~isName(String str)

	/**
	 * 判断是否为有效中国人姓名
	 */
	public static boolean isName(String str) {
		if (str == null) {
			return false;
		}
		return str.matches("[\\u4E00-\\u9FBF]{2,6}");
	} //~isName(String str)
	/*
	 * 逗号分割的ID列表，转成SQL语句in的形式
	 */
	public static String convertToInSQL(String list) {
		if (list == null || list.length() == 0) {
			return null;
		}
		list = list.replace("[", "").replace("]", "");
		String[] fs = list.split(",");

		String str = "'";
		for (int i = 0; i < fs.length; i++) {
			if (fs[i].trim().length() == 0) {
				continue;
			}
			str += fs[i].trim() + "','";
		}
		if (str.length() < 2) {
			return null;
		}
		str = str.substring(0, str.length() - 2);
		return str;
	} //~convertToInSQL(String list)
	
	/**
	 * set集合转成字符串列表
	 */
	public static String convertToString(Set<?> set) {
		if (set == null) {
			return "";
		}
		String str = set.toString();
		str = str.substring(1, str.length() - 1);
		return str.replaceAll(" ", "");
	} //~convertToString

	/**
	 * 把项目编号转成一级项目编号
	 */
	public static String convertFistLevel(String projCode) {
		if (projCode == null) {
			return null;
		}
		int groups = 0;
		int index = projCode.indexOf('.');
		String proj = "";
		while (index != -1) {
			groups++;
			proj = projCode.substring(0, index);
			if (groups == 2) {
				break;
			}
			index = projCode.indexOf('.', index + 1);
		}
		if (groups < 2) {
			return projCode;
		}
		return proj;
	} //~
	
	public static String formatStackTrace(Exception e) {
		if (e == null) {
			return "";
		}
		String str = e.getMessage();
		StackTraceElement ste[] = e.getStackTrace();
		if (e == null || ste == null) {
			return str;
		}

		for (int i = 0; i < ste.length; i++) {
			str += String.format("\n        %s.%s(%s:%d)", ste[i]
					.getClassName(), ste[i].getMethodName(), ste[i]
					.getFileName(), ste[i].getLineNumber());
		}

		return str;
	} // ~
	
	public static Timestamp max(Timestamp d1, Timestamp d2) {
		if (d1 == null) {
			return d2;
		}
		if (d2 == null) {
			return d1;
		}
		long t1 = d1.getTime();
		long t2 = d2.getTime();
		return t1 > t2 ? d1 : d2;
	}
} // /~
